package com.sais.manage.boot.platform.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sais.manage.boot.platform.dto.MenuDTO;
import com.sais.manage.boot.platform.dto.MenuSearchDTO;
import com.sais.manage.boot.platform.dto.MenuTreeDTO;
import com.sais.manage.boot.platform.entity.Menu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 宿舍管理系统-菜单表 mapper 接口
 *
 * @author zhang
 * @date 2019/11/28
 **/
@Mapper
public interface MenuMapper extends BaseMapper<Menu> {

    /**
     * 添加 菜单
     *
     * @param menu
     * @return
     */
    boolean createMenu(@Param("menu") Menu menu);

    /**
     * 根据菜单id删除
     *
     * @param menuId
     * @return
     */
    boolean deleteMenu(@Param("menuId") String menuId);


    /**
     * 更具菜单id查询
     *
     * @param menuId
     * @return
     */
    MenuDTO selectMenu(@Param("menuId") String menuId);


    /**
     * 根据pid，查询所有子菜单
     *
     * @param parentId
     * @return
     */
    List<MenuTreeDTO> listMenuTree(@Param("parentId") String parentId);


    /**
     * 模糊 分页查询
     *
     * @param page
     * @param searchDTO
     * @return
     */
    Page<MenuDTO> listMenu(@Param("page") Page<Menu> page, @Param("searchDTO") MenuSearchDTO searchDTO);


    /**
     * 通过 角色id 查询 菜单id集合
     *
     * @param roleId
     * @return
     */
    List<String> selectMenuIdsByRoleId(@Param("roleId") String roleId);


    /**
     * 菜单 绑定 权限
     *
     * @param menuId
     * @param permissionIds
     * @return
     */
    boolean bindMenuPermission(@Param("menuId") String menuId, @Param("permissionIds") List<String> permissionIds);


    /**
     * 菜单 解绑 权限
     *
     * @param menuId
     * @return
     */
    boolean unBindMenuPermission(@Param("menuId") String menuId);


    /**
     * 查询是否存在子菜单
     *
     * @param parentId
     * @return
     */
    Long hasChildren(@Param("parentId") String parentId);


    /**
     * 根据 用户id 查询菜单列表
     *
     * @param userId
     * @return
     */
    List<MenuDTO> listSystemByUserId(@Param("userId") String userId);

    /**
     * 根据用户 id 查询菜单树
     *
     * @param parentId
     * @param userId
     * @return
     */
    List<MenuTreeDTO> listMenuTreeByUser(@Param("systemId") String parentId, @Param("userId") String userId);

    /**
     * 根据用户id 查询所以父id 为0 的菜单树
     *
     * @param userId
     * @return
     */
    List<MenuTreeDTO> listMenuByUser(@Param("userId") String userId);


}
